#pragma once
#include "IncludeHeader.h"
#include <list>
#include "Object.h"


struct ShaderBuffer
{
};

typedef std::list<ShaderBuffer*> ShaderParameters;

class Shader
{
public :
	Shader();
	~Shader();	
public :
	HRESULT CreateVertexShader(WCHAR* szFileName, LPCSTR szEntryPoint, LPCSTR szShaderModel, const D3D11_INPUT_ELEMENT_DESC* pInputLayoutDesc = NULL, int EnlementNum = 0);	
	HRESULT CreatePixelShader(WCHAR* szFileName, LPCSTR szEntryPoint, LPCSTR szShaderModel,D3D11_SAMPLER_DESC* pSamplerDesc = NULL);
public :
	virtual HRESULT CreateVertexShaderParameters(D3D11_BUFFER_DESC* pDesc);
	virtual HRESULT SetVertexShaderParameters(ShaderParameters* pParameters){return 0;}
	virtual HRESULT CreatePixelShaderParameters(D3D11_BUFFER_DESC* pDesc);
	virtual HRESULT SetPixelShaderParameters(ShaderParameters* pParameters){return 0;}
private:
	HRESULT CompileShaderFromFile( WCHAR* szFileName, LPCSTR szEntryPoint, LPCSTR szShaderModel, ID3DBlob** ppBlobOut );
private :
	ID3D11VertexShader* m_pVertexShader;
	ID3D11PixelShader*  m_pPixelShader;
	ID3D11InputLayout*  m_pInputLayout;
	ID3D11SamplerState* m_pSamplerState;
	ID3D11ShaderResourceView* m_pShaderResourceView;
	ShaderParameters*    m_pVertextShaderParameters;
	ShaderParameters*    m_pPixelShaderParameters;

};